문서의 임의 삭제는 제재 대상으로, 문서를 삭제하려면 삭제 토론을 진행해야 합니다. 문서 보기문서 삭제토론 쓰레기 수집 (문단 편집) ==== 세대별 쓰레기 수집 ==== 위 같은 방법들이 제시되던 중, 객체에 메모리를 할당해서 더 안 쓰는 쓰레기가 될 때까지 걸리는 시간을 추적했을 때 대부분의 객체는 잠깐 쓰고 금세 버려지며, 반대로 오래 살아남아서 쓰이는 경우는 그렇게 많지 않다는 경향을 발견했다. 따라서 위 경향에 맞추어 잠깐 쓰고 사라져도 되는 객체를 상대적으로 크기가 작은 New 영역에 할당하고, New 영역에서 기준 시간 이상으로 오래 살아남은 객체가 있다면 Old 영역으로 이동시켜 "세대" 구분을 하는 방법이 사용되고 있다.[* Generational Garbage Collection이라 한다. 혹은 반쯤은 야매 용어지만, Old & New(또는 Old & Young) 방식이라고도 한다.] 대부분의 쓰레기는 New 영역에서 발생하므로, 상대적으로 작은 영역만 추적하면 적은 시간과 비용만 들여서 필요한 메모리를 짧은 시간 안에 확보할 수 있는 것이다. --뉴비 거름망-- 이 세대를 나누는 기준은 구현마다 상당히 다른 편이다. 위의 Chicken Scheme처럼 스택영역을 New로 쓸 수도 있는 것이고, 힙에 임의로 할당해서 쓸 수도 있다. 이 크기는 보통 해당 플랫폼이나 언어가 최소로 필요로 하는 메모리보다 조금 많게 잡는 편이다. 몇몇 구현의 경우에는 New/Old로의 2개가 아니라 임의의 개수만큼 나누는 경우도 있다. 예를 들어서 맨 처음 할당된 Old를 0세대, 그 다음을 1세대, ..., 그 다음을 n세대 처럼 말이다. 순수 함수형 언어의 경우에는 이 방식을 조금 특이하게 이용할 수 있다. 다른 언어와 달리 순수 함수형 자료구조에서는 값이 불변이므로 어떤 시점에서 생성된 객체가 이후에 생성될 객체를 가리킬 수가 없다. 즉, 어떤 세대의 값을 참조하는 것은 그 세대나 그 이후 세대밖에 없는 것이다. 이러한 특성을 이용하여 GC의 수행 속도를 올릴 수도 있다. 이렇게 전체를 수집하는 Major-GC와 New 영역만 수집하는 Minor-GC로 나눠서 GC를 수행할 수 있고, 위의 Cheney's Algorithm을 접목하여 단편화를 줄일 수도 있는 등 여러 모로 이점이 많기에 추적 기반 GC를 사용하는 현재의 많은 언어들([[Java]], [[C\#]], [[Go(프로그래밍 언어)|Go]] 등)은 이 기법을 사용하고 있다.저장 버튼을 클릭하면 당신이 기여한 내용을 CC-BY-NC-SA 2.0 KR으로 배포하고,기여한 문서에 대한 하이퍼링크나 URL을 이용하여 저작자 표시를 하는 것으로 충분하다는 데 동의하는 것입니다.이 동의는 철회할 수 없습니다.캡챠저장미리보기